//============================================================================
// Name        : listar_fecha.cpp
// Author      : 
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================


#include "libreria.h"
using namespace std;

FILE *citas;
FILE *indice;

void leer_fecha(string&);
string pasa_a_string(int number);
void listado(string fecha);
void generar_horas_de_cita(string fecha_cita,vector<string> &citas_dia);
void cargar_datos();

typedef map<string, int, less<string> > tipo_mapa_citas;
tipo_mapa_citas mapa_citas;
tipo_cita revision;

int main() {
	string fecha_de_cita;
	if ((citas=fopen("..\\..\\datos\\citas.dat","r+b"))==NULL)
		printf("El fichero citas no se puede abrir\n");
	if ((indice=fopen("..\\..\\datos\\indice.dat","r"))==NULL)
		printf("El fichero indice no se puede abrir\n");
	leer_fecha(fecha_de_cita);
	cargar_datos();
	listado(fecha_de_cita);
	system("pause");
	fclose(citas);
	fclose(indice);
	return 0;
}


void cargar_datos()
{
	char fecha_hora[14];
	string auxiliar;
	int posicion;
	while(!feof(indice))
		{
			fscanf(indice,"%s >>> %d\n",fecha_hora,&posicion);
			auxiliar=fecha_hora; //pasamos de char* a string STL
			mapa_citas.insert(pair<string,int>(auxiliar,posicion));
			auxiliar.clear();
		}
}
void listado(string fecha){
	string fecha_cita,hora_a_buscar;
	vector<string> citas_en_dia,horas_disponibles;
	vector<string>::iterator itr;
	tipo_mapa_citas::iterator itr_citas;

	int posicion;
	bool hay_citas_disponibles=false;
	tipo_cita estructura;


	generar_horas_de_cita(fecha,citas_en_dia);
	for (itr=citas_en_dia.begin();itr!=citas_en_dia.end();itr++)
	{
		hora_a_buscar=(*itr);
		if(mapa_citas.find(hora_a_buscar)!=mapa_citas.end())
		{//existe una cita para tal hora
			itr_citas=mapa_citas.find(hora_a_buscar);
			posicion=(*itr_citas).second;

			fseek(citas,(posicion-1)*sizeof(tipo_cita),0);
			fread(&estructura,sizeof(tipo_cita),1,citas);
			if(estructura.marca=='A')
			{
			cout<<endl<<(*itr_citas).first<<"\t"<<"Codigo paciente: "<<estructura.cod_paciente<<endl<<estructura.tratamiento<<endl;
			cout<<"_______________________________________"<<endl;
			hay_citas_disponibles=true;
			}
		}

	}
	//si todas las citas para ese dia estan cogidas:
	if (hay_citas_disponibles==false)
	{
		cout<<"No hay citas para este dia"<<endl;

	}


	horas_disponibles.clear();
	citas_en_dia.clear();


}


void generar_horas_de_cita(string fecha_cita,vector<string> &citas_dia)
{
	char horas[8][3]={"11","12","13","14","16","17","18","19"};
	for (int i=0;i<8;i++)
	{
		citas_dia.push_back(fecha_cita+'-'+horas[i]);
	}
}

void leer_fecha(string &fecha)
{
	//lectura fecha
	int ano,mes,dia;
	cout<<"Introduce la fecha de la cita:"<<endl;
	do{
		cout<<"Anno: ";
		ano=leer_entero();
	}while(ano<2013 || ano>2023);
	do{
		cout<<"Mes: ";
		mes=leer_entero();
	}while(mes<1 || mes>12);
	do{
		cout<<"Dia: ";
		dia=leer_entero();
	}while(dia<1 || dia>31);
	fecha=fecha+pasa_a_string(ano);
	fecha.push_back('-');
	if(mes>=10)
		fecha=fecha+pasa_a_string(mes);
	else
		fecha=fecha+"0"+pasa_a_string(mes);
	fecha.push_back('-');
	if(dia>=10)
		fecha=fecha+pasa_a_string(dia);
	else
		fecha=fecha+"0"+pasa_a_string(dia);

}

string pasa_a_string(int number)
{
	stringstream ss;//create a stringstream
	ss << number;//add number to the stream
	return ss.str();//return a string with the contents of the stream
}
